package com.businesscard.system.service;

import com.businesscard.system.entity.BusinessCard;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 名片服务接口
 */
public interface BusinessCardService {
    
    /**
     * 创建名片
     * @param card 名片信息
     * @return 创建结果
     */
    boolean createCard(BusinessCard card);
    
    /**
     * 批量创建名片
     * @param cards 名片列表
     * @return 创建结果
     */
    boolean batchCreateCards(List<BusinessCard> cards);
    
    /**
     * 更新名片信息
     * @param card 名片信息
     * @return 更新结果
     */
    boolean updateCard(BusinessCard card);
    
    /**
     * 根据ID查询名片
     * @param id 名片ID
     * @return 名片信息
     */
    BusinessCard getCardById(Integer id);
    
    /**
     * 根据名片夹ID查询所有未删除的名片
     * @param folderId 名片夹ID
     * @return 名片列表
     */
    List<BusinessCard> getCardsByFolderId(Integer folderId);
    
    /**
     * 查询名片夹中已删除的名片(回收站)
     * @param folderId 名片夹ID
     * @return 已删除的名片列表
     */
    List<BusinessCard> getDeletedCardsByFolderId(Integer folderId);
    
    /**
     * 逻辑删除名片(移入回收站)
     * @param id 名片ID
     * @return 删除结果
     */
    boolean deleteCard(Integer id);
    
    /**
     * 恢复已删除的名片
     * @param id 名片ID
     * @return 恢复结果
     */
    boolean restoreCard(Integer id);
    
    /**
     * 彻底删除名片
     * @param id 名片ID
     * @return 删除结果
     */
    boolean removeCard(Integer id);
    
    /**
     * 条件查询名片
     * @param params 查询参数
     * @return 名片列表
     */
    List<BusinessCard> searchCards(Map<String, Object> params);
    
    /**
     * 批量更新名片特定字段
     * @param cardIds 名片ID列表
     * @param fieldName 字段名
     * @param newValue 新值
     * @return 更新结果
     */
    boolean batchUpdateCards(List<Integer> cardIds, String fieldName, String newValue);
    
    /**
     * 导入名片
     * @param file Excel文件
     * @param folderId 名片夹ID
     * @return 导入结果，包含成功和失败的记录
     */
    Map<String, Object> importCards(MultipartFile file, Integer folderId);
    
    /**
     * 导出名片
     * @param folderId 名片夹ID
     * @return 导出的文件字节数组
     */
    byte[] exportCards(Integer folderId);
    
    /**
     * 根据查询条件导出名片
     * @param params 查询参数
     * @return 导出的文件字节数组
     */
    byte[] exportCardsBySearchParams(Map<String, Object> params);
} 